package com.example.controller;


import com.example.pojo.Result;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * HttpSession演示
 */
@Slf4j
@RestController
public class SessionController {

    //设置Cookie
    /**
     * 设置Cookie的示例方法
     * 通过HTTP响应向客户端添加一个名为"login_username"，值为"itheima"的Cookie
     *
     * @param response HttpServletResponse对象，用于添加Cookie到HTTP响应中
     * @return 返回一个表示操作成功或失败的结果对象
     */
    @GetMapping("/c1")
    public Result cookie1(HttpServletResponse response){
        // 创建并添加一个名为"login_username"，值为"itheima"的Cookie到响应中
        response.addCookie(new Cookie("login_username","itheima")); //设置Cookie/响应Cookie
        // 返回一个表示操作成功的Result对象
        return Result.success();
    }

    //获取Cookie
    /**
     * 处理GET请求的接口方法，用于读取特定cookie信息
     * 该方法主要用于演示如何从HTTP请求中获取cookie，并进行简单处理
     *
     * @param request HttpServletRequest对象，用于获取请求中的cookie信息
     * @return 返回一个Result对象，表示操作结果
     */
    @GetMapping("/c2")
    public Result cookie2(HttpServletRequest request){
        // 获取请求中的所有cookie
        Cookie[] cookies = request.getCookies();
        // 遍历所有cookie，寻找名为login_username的cookie
        for (Cookie cookie : cookies) {
            // 判断当前cookie的名称是否为login_username
            if(cookie.getName().equals("login_username")){
                // 输出name为login_username的cookie的值
                System.out.println("login_username: "+cookie.getValue());
            }
        }
        // 返回操作成功的结果
        return Result.success();
    }



    /**
     * 使用GetMapping注解处理GET请求到/s1路径的处理方法
     * 此方法主要用于在HTTP会话中存储用户登录信息
     *
     * @param session 代表HTTP会话，用于存储会话级别的数据
     * @return 返回一个Result对象，表示操作结果
     */
    @GetMapping("/s1")
    public Result session1(HttpSession session){
        // 记录当前会话对象的哈希码，用于调试或跟踪会话信息
        log.info("HttpSession-s1: {}", session.hashCode());

        // 往session中存储数据，这里存储的是用户登录信息
        // 使用setAttribute方法，键为"loginUser"，值为"tom"
        session.setAttribute("loginUser", "tom");
        // 返回操作成功的Result对象
        return Result.success();
    }

    /**
     * 处理GET请求的映射方法
     * 该方法用于获取与当前HTTP会话相关的登录用户信息
     *
     * @param session HttpSession对象，用于访问会话级别的数据
     * @return 返回一个Result对象，其中包含会话中的登录用户信息
     */
    @GetMapping("/s2")
    public Result session2(HttpSession session){
        // 记录当前HTTP会话的标识信息，用于调试或跟踪
        log.info("HttpSession-s2: {}", session.hashCode());

        // 从session中获取数据
        // 这里尝试获取名为"loginUser"的属性，该属性可能包含用户登录信息
        Object loginUser = session.getAttribute("loginUser");
        // 记录获取到的登录用户信息，用于调试或跟踪
        log.info("loginUser: {}", loginUser);
        // 返回一个表示操作成功的Result对象，其中包含从会话中获取的登录用户信息
        return Result.success(loginUser);
    }
}
